Vertex ML Metadata
ベースになっているのは TensorFlow の MLMD Artifact が基底? Dataset と Model がデフォルトで提供されている派生型的な
取得
aiplatform.Artifact.get_with_uri(...) で URI フィールドが一致するものがあれば返る
同じ URI のものが複数存在することはないの?
ある、新しい方が返る(とドキュメントにも書いてた)
作成
使いそうなフィールドに限定するとこのあたりだろうか
code:create.py
create(
schema_title: str,
*,
resource_id: typing.Optionalstr = None, uri: typing.Optionalstr = None, display_name: typing.Optionalstr = None, description: typing.Optionalstr = None, state: google.cloud.aiplatform_v1.types.artifact.Artifact.State = State.LIVE,
) -> google.cloud.aiplatform.metadata.artifact.Artifact
schema_title は system.Artifact, system.Dataset, system.Model, system.HTML など
get_or_create は resource_id を引数に取るので使い所がわからない
特定の BQ Table を使う時に無ければ登録するとか?
適当な値を projects/.../.../.../metadataStores/default/artifacts/... に指定しても作れるわけではない
filter
code:filter.py
from google.cloud import aiplatform
aiplatform.init(project=project, location=location)
artifacts = aiplatform.Artifact.list(
filter='metadata.model.string_value="large-v3" AND display_name="transcribed"',
order_by='CREATE_TIME desc',
)
from pprint import pprint
for a in artifacts:
pprint(a.name)
pprint(a.display_name)
pprint(a.metadata)
list で帰ってくるのはこのインスタンス
文字列はワイルドカード使える
metadata.source.string_value = "*foo.mkv"'
order_by に使えるのは CREATE_TIME, LAST_UPDATE_TIME, ID
desc, asc も使える、小文字のみ
order_by='CREATE_TIME desc'
pipeline から探す
pipeline を実行すると対応する context が生成されているので、その context から探す
pipeline だろう、と思って Execution やら Experiment から引こうと思ってもうまくいかない
Execution はパイプライン中のステップで、粒度が違う
特定のステップの直下や直上を引くのには使えるが、パイプライン中で生成されたやつ、の粒度の指定に使うものではない(これムズくない?)
code:search_by_context.py
import google.cloud.aiplatform
pipeline = aiplatform.Context.get('pipeline-20240711150000') # 実行名で Context を引く
artifacts = aiplatform.Artifact.list(filter=f'in_context("{pipeline.resource_name}")')
experiment から探す
pipeline を submit する時に experiment を指定する
job.submit(service_account="...", experiment="compare-foo-bar")
名前で experimentを探す
experiment = aiplatform.Experiment.get('compare-foo-bar')
df で取るなら aiplatform.get_experiment_df('compare-foo-bar')
run_name から Execution 引ける
なんか引くのムズかった
多分一発で artifact を引く方法はない?
いろいろやっても引けない...
Artifact のフィールド自体には親とかない、Execution 側にある
aiplatform.Context.list なら with_execution で Context 見つかる
aplatform.Artifact.list で with_execution しても見つからん
直上の ContainerExecution の id を渡すと見つかる
わかったかも!!!
aiplatform.Artifact.list(filter=f'in_context("...")') で PipelineRun の Context をしていする
aiplatform.Context.get(pipeline_run_name) で Context 取れる
TODO これって pipeline で設定する experiment 関係ない? → そう
in_context は context から Artifact, Execution を引ける
parent_contexts, child_contexts が使えるのは Context 対してのみ?